package com.styletransfer.controller;

import com.styletransfer.model.ApiResponse;
import com.styletransfer.model.Tag;
import com.styletransfer.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 标签控制器
 * 
 * 提供标签相关的API接口，包括创建、更新、删除、查询标签等
 */
@RestController
@RequestMapping("/tag")
public class TagController {

    @Autowired
    private TagService tagService;

    /**
     * 创建标签（管理员功能）
     * 
     * @param tag 标签信息
     * @return API响应
     */
    @PostMapping("/create")
    public ApiResponse<Tag> createTag(@RequestBody Tag tag) {
        return tagService.createTag(tag);
    }

    /**
     * 更新标签（管理员功能）
     * 
     * @param tag 标签信息
     * @return API响应
     */
    @PutMapping("/update")
    public ApiResponse<Tag> updateTag(@RequestBody Tag tag) {
        return tagService.updateTag(tag);
    }

    /**
     * 删除标签（管理员功能）
     * 
     * @param id 标签ID
     * @return API响应
     */
    @DeleteMapping("/{id}")
    public ApiResponse<Void> deleteTag(@PathVariable Long id) {
        return tagService.deleteTag(id);
    }

    /**
     * 根据ID获取标签
     * 
     * @param id 标签ID
     * @return API响应
     */
    @GetMapping("/{id}")
    public ApiResponse<Tag> getTagById(@PathVariable Long id) {
        return tagService.findById(id);
    }

    /**
     * 获取所有标签
     * 
     * @return API响应
     */
    @GetMapping("/all")
    public ApiResponse<List<Tag>> getAllTags() {
        return tagService.findAll();
    }

    /**
     * 搜索标签
     * 
     * @param keyword 关键词
     * @return API响应
     */
    @GetMapping("/search")
    public ApiResponse<List<Tag>> searchTags(@RequestParam String keyword) {
        return tagService.search(keyword);
    }

    /**
     * 获取热门标签
     * 
     * @param limit 限制数量
     * @return API响应
     */
    @GetMapping("/hot")
    public ApiResponse<List<Tag>> getHotTags(@RequestParam(defaultValue = "10") Integer limit) {
        return tagService.findHot(limit);
    }
}
